package com.ldy.job.utils;

import lombok.extern.slf4j.Slf4j;
import org.apache.poi.sl.usermodel.SlideShow;
import org.apache.poi.xslf.usermodel.*;

import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;

@Slf4j
public class PPTUtils {

    /**
     * 进行文本替换
     */
    public static void changPPT(String inputUrl, String outputUrl, Map<String, String> textMap) {
        try {
            //读取模板ppt
            SlideShow ppt = new XMLSlideShow(new FileInputStream(inputUrl));
            //提取文本信息
            List<XSLFSlide> slides = ppt.getSlides();
            for (XSLFSlide slide : slides) {
                List<XSLFShape> shapes = slide.getShapes();
                for (int i = 0; i < shapes.size(); i++) {
                    Rectangle2D anchor = shapes.get(i).getAnchor();
                    if (shapes.get(i) instanceof XSLFTextBox) {
                        XSLFTextBox txShape = (XSLFTextBox) shapes.get(i);
                        for (Map.Entry<String, String> entry : textMap.entrySet()) {
                            String key = entry.getKey();
                            String value = entry.getValue();
                            if (txShape.getText().contains("${" + key + "}")) {
                                // 替换文字内容.用TextRun获取替换的文本来设置样式
                                if (key.contains("p")) {
                                    value = value.replaceFirst("分公司", "");
                                }
                                if (value == null) {
                                    value = "";
                                }
                                txShape.setText(txShape.getText().replace("${" + key + "}", value));
                                XSLFTextRun xslfTextRun = txShape.getTextParagraphs().get(0).getTextRuns().get(0);
                                if (key.equals("31_3")) {
                                    xslfTextRun.setFontFamily("微软雅黑");  //设置字体
                                    xslfTextRun.setFontSize(16d); // 设置字体大小
                                    xslfTextRun.setFontColor(new Color(79, 129, 189));
                                } else if (key.contains("p")) {
                                    xslfTextRun.setFontFamily("微软雅黑");  //设置字体
                                    xslfTextRun.setFontSize(12d); // 设置字体大小
                                    xslfTextRun.setFontColor(new Color(79, 129, 189));
                                } else if (key.startsWith("31_")) {
                                    xslfTextRun.setFontFamily("微软雅黑");  //设置字体
                                    xslfTextRun.setFontSize(16d); // 设置字体大小
                                    xslfTextRun.setFontColor(new Color(31, 73, 125));
                                } else if (key.equals("y")) {
                                    xslfTextRun.setFontFamily("微软雅黑");  //设置字体
                                    xslfTextRun.setFontSize(16d); // 设置字体大小
                                    xslfTextRun.setFontColor(new Color(82, 93, 110));
                                } else if (key.equals("m")) {
                                    xslfTextRun.setFontFamily("微软雅黑");  //设置字体
                                    xslfTextRun.setFontSize(16d); // 设置字体大小
                                    xslfTextRun.setFontColor(new Color(82, 93, 110));
                                } else if (key.equals("5_87")) {
                                    xslfTextRun.setFontFamily("Calibri (正文)");
                                    xslfTextRun.setFontSize(18d); // 设置字体大小
                                    xslfTextRun.setFontColor(new Color(255, 255, 255));
                                } else if (key.startsWith("5_") && value.contains("%")) {
                                    xslfTextRun.setFontFamily("Calibri (正文)");
                                    xslfTextRun.setFontSize(14d); // 设置字体大小
                                    xslfTextRun.setFontColor(new Color(100, 117, 126));
                                } else if (key.startsWith("5_") && !value.contains("%")) {
                                    xslfTextRun.setFontFamily("Calibri (正文)");
                                    xslfTextRun.setFontSize(18d); // 设置字体大小
                                    xslfTextRun.setFontColor(new Color(100, 117, 126));
                                } else if (key.startsWith("lj_") && value.matches("-?\\d+(\\.\\d+)?")) {
                                    xslfTextRun.setFontFamily("微软雅黑");
                                    xslfTextRun.setFontSize(20d); // 设置字体大小
                                    xslfTextRun.setFontColor(new Color(79, 129, 189));
                                }
                                xslfTextRun.setBold(true);
                            }
                        }
                    }
                }
            }
            FileOutputStream outputStreams = new FileOutputStream(new File(outputUrl));
            ppt.write(outputStreams);
            outputStreams.close();
        } catch (IOException e) {
            log.error("ppt生成出错", e);
        }
    }

}
